% Ejercicio "Programa wc"
\section*{\fbox{\theejercicio} - Programa {\tt wc}}

\begin{enumerate}[1)]
\item Construir mediante LEX el programa {\tt {\bf wc}} de UNIX. Este programa tiene como entrada un fichero de texto y como salida tres numeros que representan el n\'umero de lineas, el n\'umero de palabras, y el n\'umero de caracteres que contiene el fichero. Por palabra se entiende cualquier secuencia de caracteres distinta de los blancos, tabuladores o fin de l\'{\i}nea.
\item Repetir el programa anterior para su funcionamiento tanto sobre UNIX como sobre MS-DOS. La caracteristica diferencial de los ficheros de texto de MS-DOS es que utilizan dos caracteres para se\~nalar el fin de linea corespondientes a la secuencia retorno de carro \verb@\r@ y fin de linea \verb@\n@.
\end{enumerate}

% Solución del ejercicio
\subsection*{SOLUCI\'ON}

Apartado 1)
\begin{verbatim}
%{
   int nc = 0;
   int np = 0;
   int nl = 0;
%}

%%

[^\n\t\ ]+    { nc += yyleng; np++; }
\n            { nc ++; nl ++;  }
.             { nc ++; }

%%

int yywrap() {
   printf("\t%d\t%d\t%d\n", nl, np, nc);
   return 1;
}
\end{verbatim}

Apartado 2)
\begin{verbatim}
%{
   int nc = 0;
   int np = 0;
   int nl = 0;
%}

%%

[^\n\r\t\ ]+  { nc += yyleng; np++; }
\n|\r\n       { nc += yyleng; nl++; }
.             { nc ++; }

%%

int yywrap() {
   printf("\t%d\t%d\t%d\n", nl, np, nc);
   return 1;
}
\end{verbatim}